/*
试题 基础练习 特殊回文数

资源限制

内存限制：512.0MB   C/C++时间限制：1.0s   Java时间限制：3.0s   Python时间限制：5.0s

问题描述
　　123321是一个非常特殊的数，它从左边读和从右边读是一样的。
　　输入一个正整数n， 编程求所有这样的五位和六位十进制数，满足各位数字之和等于n。

输入格式
　　输入一行，包含一个正整数n。

输出格式
　　按从小到大的顺序输出满足条件的整数，每个整数占一行。

样例输入
52

样例输出
899998
989989
998899

数据规模和约定
1<=n<=54。

*/


/*
	思路: 枚举算法 和 回文数的性质
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

// flag标记 n 的奇偶性
void ans5(int n, int flag)
{
	vector<int> ans;
	int num[5];
	for (int i = 1-flag; i <= 9-flag; i += 2){
		int tmp = n;
		tmp -= i;
		if (tmp <= 0)
			break;
		num[2] = i;
		tmp /= 2;
		for (int j = 1; j <= 9;j++)
		for (int k = 0; k <= 9;k++)
		if (j + k == tmp){
			num[0] = num[4] = j;
			num[1] = num[3] = k;
			ans.push_back(num[0] * 10000 + num[1] * 1000 + num[2] * 100 + num[3] * 10 + num[4]);
		}
	}
	if (!ans.empty()){
		sort(ans.begin(), ans.end());
		for (int i = 0; i < ans.size(); i++){
			cout << ans[i] << endl;
		}
	}
}

void ans6(int n)
{
	vector<int> ans6;
	int num2[6];
	int tmp = n;
	tmp /= 2;
	for (int i = 1; i <= 9; i++){
		for (int j = 0; j <= 9; j++){
			for (int k = 0; k <= 9; k++){
				if (i + j + k == tmp){
					num2[0] = num2[5] = i;
					num2[1] = num2[4] = j;
					num2[2] = num2[3] = k;
					ans6.push_back(num2[0] * 100000 + num2[1] * 10000 + num2[2] * 1000 + num2[3] * 100 + num2[4] * 10 + num2[5]);
				}
			}
		}
	}
	sort(ans6.begin(), ans6.end());
	for (int i = 0; i < ans6.size(); i++){
		cout << ans6[i] << endl;
	}
}
int main()
{
	int n;
	cin >> n;
	// 奇数一定是5位的回文数
	// 5位的回文数数位之和最大45
	if (n % 2 == 1 && n <= 45){
		ans5(n, 0);
	}
	// 偶数的回文数5位6位都有可能
	else if (n % 2 == 0 && n <= 45){
		ans5(n, 1);
		ans6(n);
	}
	else{
		ans6(n);
	}
	return 0;
}